package edu.towson.cosc.cosc455.sliao1.markdowncompiler;

import java.util.*;

import edu.towson.cosc.cosc455.interfaces.LexicalAnalyzer;

public class MylexicalAnalyzer implements LexicalAnalyzer {
	private char currentChar='-';
	private HashSet<String> tokens;  
	//get next token.
	public void getNextToken() {
		currentChar = getCharacter();
		if(currentChar == '#'){
			addCharacter();
			currentChar = getCharacter();
			while(((currentChar != '#') && !lookupToken())){
				addCharacter();
				currentChar = getCharacter();
			}
		}
		else{
			while((currentChar != '#') && (Compiler.text.length() != 1)){
				addCharacter();
				currentChar = getCharacter();
				if(currentChar == '#'){
					Compiler.text = currentChar + Compiler.text;
				}
			}
		}		
	}
	//get the next character.
	public char getCharacter() {
		currentChar = Compiler.text.charAt(0);
		Compiler.text = Compiler.text.substring(1);
		return currentChar;
	}
	//add character to string.
	public void addCharacter() {
		Compiler.token = Compiler.token + currentChar; 
	}
	//Check space.
	public boolean isSpace(char c) {
		boolean isSpace = false;
		if((c == ' ') || (c == '\t') || (c=='	')){
			isSpace = true;
		}
		return isSpace;
	}
	//reset current character to default.
	public void resetLexer(){
		Compiler.token = "";
		currentChar='-';
	}
	//return true if token is valid.
	public boolean lookupToken() {
		boolean lookupToken = false;
		tokens = new HashSet<String>();
		tokens.add("#START DOCUMENT"); tokens.add("#start document");
		tokens.add("#END DOCUMENT"); tokens.add("#end document");
		tokens.add("#START HEAD"); tokens.add("#start head");
		tokens.add("#END HEAD"); tokens.add("#end head");
		tokens.add("#START TITLE"); tokens.add("#start title");
		tokens.add("#END TITLE"); tokens.add("#end title");
		tokens.add("#START PARAGRAPH"); tokens.add("#start paragraph");
		tokens.add("#END PARAGRAPH"); tokens.add("#end paragraph");
		tokens.add("#START BOLD"); tokens.add("#start bold");
		tokens.add("#END BOLD"); tokens.add("#end bold");
		tokens.add("#START ITALICS"); tokens.add("#start italics");
		tokens.add("#END ITALICS"); tokens.add("#end italics");
		tokens.add("#START LIST"); tokens.add("#end list");
		tokens.add("#END LIST"); tokens.add("#end list");
		tokens.add("#START ITEM"); tokens.add("#start item");
		tokens.add("#END ITEM"); tokens.add("#end item");
		tokens.add("#NEWLINE"); tokens.add("#newline");
		tokens.add("#START AUDIO"); tokens.add("#start audio");
		tokens.add("#END AUDIO"); tokens.add("#end audio");
		tokens.add("#START VIDEO"); tokens.add("#start video");
		tokens.add("#END VIDEO"); tokens.add("#end video");
		tokens.add("#START DEFINE"); tokens.add("#start define");
		tokens.add("#END DEFINE"); tokens.add("#end define");
		tokens.add("#VALUE"); tokens.add("#value");
		tokens.add("#NAME"); tokens.add("#name");
		tokens.add("#START USE"); tokens.add("#start use");
		tokens.add("#END USE"); tokens.add("#end use");
		if(tokens.contains(Compiler.token))
		{
			lookupToken = true;
		}
		return lookupToken;
	}
}

